对矢量可执行的其他操作
vector<Review>::iterator pr;
for(pr = books.begin(); pr != books.end; ++pr)
{
ShowReview(*pr);
}
可替换为
for_each(books.begin(); books.end(); ShowReview);// for_each可用于任何容器
Random_shuffle()函数可接受两个指定区间的迭代器参数,并随机排列该区间中的元素。
random_shuffle(books.begin(), books.end());
sort()函数对区间中的元素进行排序
vector
如果容器元素师用户定义的对象,则要使用sort(),必须定义能够处理该类型对象的operator<()函数。
例如,如果为Review提供了成员或非成员函数operator<(),则可以对包含Review对象的矢量进行排序。由于Review是一个结构,因此其成员是公有的,这样的非成员函数将为:
bool operator<(const Review &r1, const Review &r2)
{
if(r1.title < r2.title)
return true;
else if(ri.title == r2.title && ri.rating < r2.rating)
return true;
else
return false;
}
有了这样的函数后,就可以对包含Review对象(如books)的矢量进行排序了:
sort(books.begin(), books.end());
如果想按降序或是按rating(而不是title)排序,该如何办呢?可以使用另一种格式的sort()。它接受3个参数,前两个参数也是指定区间的迭代器,最后一个参数是指向要使用的函数的指针(函数或对象),而不是用于比较的operator<()。返回值可转换为bool,false表示两个参数的顺序不正确。
bool WorseThan(const Review &r1, const Review &r2)
{
if(r1.rating < r2.rating)
return true;
else
return false;
}
有了这个函数后,就可以使用下面的语句将包含Review对象的books矢量按rating升序排列。
sort(books.begin(), books.end(), WorseThan);
第一种排序称为全排序,第二种排序称为完整弱排序。